Summary: Ex1_Luc04b
Functions: 0 s nil cons nats pairs odds incr head tail
Constructors: 0 s nil cons
Variables: X XS
Arities:
ar(0) = 0
ar(s) = 1
ar(nil) = 0
ar(cons) = 2
ar(nats) = 0
ar(pairs) = 0
ar(odds) = 0
ar(incr) = 1
ar(head) = 1
ar(tail) = 1
Replacement map:
µ(0) = {}
µ(s) = {1}
µ(nil) = {}
µ(cons) = {1}
µ(nats) = {}
µ(pairs) = {}
µ(odds) = {}
µ(incr) = {1}
µ(head) = {1}
µ(tail) = {1}
Rules: (file Ex1_Luc04b)
nats -> cons(0,incr(nats))
pairs -> cons(0,incr(odds))
odds -> incr(pairs)
incr(cons(X,XS)) -> cons(s(X),incr(XS))
head(cons(X,XS)) -> X
tail(cons(X,XS)) -> XS
The CS-TRS in OBJ format (file Ex1_Luc04b.obj):
obj Ex1_Luc04b is
sort S .
op 0 : -> S .
op s : S -> S .
op nil : -> S .
op cons : S S -> S [strat (1 0)] .
op nats : -> S .
op pairs : -> S .
op odds : -> S .
op incr : S -> S .
op head : S -> S .
op tail : S -> S .
vars X XS : S .
eq nats = cons(0,incr(nats)) .
eq pairs = cons(0,incr(odds)) .
eq odds = incr(pairs) .
eq incr(cons(X,XS)) = cons(s(X),incr(XS)) .
eq head(cons(X,XS)) = X .
eq tail(cons(X,XS)) = XS .
endo
Negative results
- The µ-termination of Ex1_Luc04b cannot be proved
terminating by using
Lucas' transformation. The TRS Ex1_Luc04b_L:
nats -> cons(0)
pairs -> cons(0)
odds -> incr(pairs)
incr(cons(X)) -> cons(s(X))
head(cons(X)) -> X
tail(cons(X)) -> XS
contains extra variables.
- The µ-termination of Ex1_Luc04b cannot be proved
terminating by using
Zantema's transformation. The TRS Ex1_Luc04b_Z:
nats -> cons(0,n__incr(nats))
pairs -> cons(0,n__incr(odds))
odds -> incr(pairs)
incr(cons(X,XS)) -> cons(s(X),n__incr(activate(XS)))
head(cons(X,XS)) -> X
tail(cons(X,XS)) -> activate(XS)
incr(X) -> n__incr(X)
activate(n__incr(X)) -> incr(X)
activate(X) -> X
is not terminating (due to the first rule).
- The µ-termination of Ex1_Luc04b cannot be proved
terminating by using
Ferreira and Ribeiro's transformation. The TRS Ex1_Luc04b_FR:
nats -> cons(0,n__incr(n__nats))
pairs -> cons(0,n__incr(n__odds))
odds -> incr(pairs)
incr(cons(X,XS)) -> cons(s(X),n__incr(activate(XS)))
head(cons(X,XS)) -> X
tail(cons(X,XS)) -> activate(XS)
incr(X) -> n__incr(X)
nats -> n__nats
odds -> n__odds
activate(n__incr(X)) -> incr(activate(X))
activate(n__nats) -> nats
activate(n__odds) -> odds
activate(X) -> X
is not terminating:
odds -> incr(pairs)
-> incr(cons(0,n__incr(n__odds)))
-> cons(s(0),n__incr(activate(n__incr(n__odds))))
-> cons(s(0),n__incr(incr(activate(n__odds))))
-> cons(s(0),n__incr(incr(odds)))
-> ...
Positive results
-
The µ-termination of Ex1_Luc04b is proved in [Luc04b, Figure 2] by
using the following polynomial interpretation (computed by
MU-TERM):
[0] = 0
[s](X) = X
[nil] = 0
[cons](X1,X2) = X1 + 1/5.X2
[nats] = 1
[pairs] = 1
[odds] = 3
[incr](X) = X + 1
[head](X) = X + 1
[tail](X) = 5.X + 1
-
The µ-termination of Ex1_Luc04b is proved in
[Luc04b, Figure 4] by
using Giesl and Middeldorp's transformation. The TRS Ex1_Luc04b_GM:
a__nats -> cons(0,incr(nats))
a__pairs -> cons(0,incr(odds))
a__odds -> a__incr(a__pairs)
a__incr(cons(X,XS)) -> cons(s(mark(X)),incr(XS))
a__head(cons(X,XS)) -> mark(X)
a__tail(cons(X,XS)) -> mark(XS)
mark(nats) -> a__nats
mark(pairs) -> a__pairs
mark(odds) -> a__odds
mark(incr(X)) -> a__incr(mark(X))
mark(head(X)) -> a__head(mark(X))
mark(tail(X)) -> a__tail(mark(X))
mark(0) -> 0
mark(s(X)) -> s(mark(X))
mark(nil) -> nil
mark(cons(X1,X2)) -> cons(mark(X1),X2)
a__nats -> nats
a__pairs -> pairs
a__odds -> odds
a__incr(X) -> incr(X)
a__head(X) -> head(X)
a__tail(X) -> tail(X)
can be proved terminating by using the dependency pairs technique
together with a polynomial interpretation over the rationals
(use
MU-TERM).
-
The µ-termination of Ex1_Luc04b can also be proved by using
CSDP (computed
by MuTerm).
-
The µ-termination of Ex1_Luc04b can also be proved by using
CSRPO (computed
by MuTerm).